Bombas_training.csvEl dataset a analizar, del que no se tiene ningún tipo de información, contiene detalles del estado de situación de diversas bombas de agua instaladas en Tanzania, país situado en la costa este de África Central y cuya capital es la ciudad de Dodoma.
library(tidytable)
##
## Adjuntando el paquete: 'tidytable'
## The following objects are masked from 'package:stats':
##
## dt, filter, lag
## The following object is masked from 'package:base':
##
## %in%
library(dplyr)
##
## Adjuntando el paquete: 'dplyr'
## The following objects are masked from 'package:tidytable':
##
## across, add_count, add_tally, anti_join, arrange, between,
## bind_cols, bind_rows, c_across, case_match, case_when, coalesce,
## consecutive_id, count, cross_join, cume_dist, cur_column, cur_data,
## cur_group_id, cur_group_rows, dense_rank, desc, distinct, filter,
## first, full_join, group_by, group_cols, group_split, group_vars,
## if_all, if_any, if_else, inner_join, is_grouped_df, lag, last,
## lead, left_join, min_rank, mutate, n, n_distinct, na_if, nest_by,
## nest_join, nth, percent_rank, pick, pull, recode, reframe,
## relocate, rename, rename_with, right_join, row_number, rowwise,
## select, semi_join, slice, slice_head, slice_max, slice_min,
## slice_sample, slice_tail, summarise, summarize, tally, top_n,
## transmute, tribble, ungroup
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
library(data.table)
##
## Adjuntando el paquete: 'data.table'
## The following objects are masked from 'package:dplyr':
##
## between, first, last
## The following objects are masked from 'package:tidytable':
##
## %notin%, between, first, fread, last
library(ggplot2)
library(forcats)
library(magrittr)
##
## Adjuntando el paquete: 'magrittr'
## The following object is masked from 'package:tidytable':
##
## extract
library(ggpmisc)
## Cargando paquete requerido: ggpp
## Registered S3 methods overwritten by 'ggpp':
## method from
## heightDetails.titleGrob ggplot2
## widthDetails.titleGrob ggplot2
##
## Adjuntando el paquete: 'ggpp'
## The following object is masked from 'package:ggplot2':
##
## annotate
library(readr)
library(formattable)
Cargamos el conjunto de datos relativo a las bombas de agua localizadas en Tanzania:
df = fread("C:/Users/Asus/Desktop/DIPLOMA EXPERTA/CURSO/MODULO2/EVALUACION/Entrega/Bombas_training.csv") %>% as.data.table()
Visualicemos la cabecera de nuestro dataset:
head(df)
## id amount_tsh date_recorded funder gps_height installer
## <int> <num> <IDat> <char> <int> <char>
## 1: 69572 6000 2011-03-14 Roman 1390 Roman
## 2: 8776 0 2013-03-06 Grumeti 1399 GRUMETI
## 3: 34310 25 2013-02-25 Lottery Club 686 World vision
## 4: 67743 0 2013-01-28 Unicef 263 UNICEF
## 5: 19728 0 2011-07-13 Action In A 0 Artisan
## 6: 9944 20 2011-03-13 Mkinga Distric Coun 0 DWE
## longitude latitude wpt_name num_private
## <num> <num> <char> <int>
## 1: 34.93809 -9.856322 none 0
## 2: 34.69877 -2.147466 Zahanati 0
## 3: 37.46066 -3.821329 Kwa Mahundi 0
## 4: 38.48616 -11.155298 Zahanati Ya Nanyumbu 0
## 5: 31.13085 -1.825359 Shuleni 0
## 6: 39.17280 -4.765587 Tajiri 0
## basin subvillage region region_code district_code
## <char> <char> <char> <int> <int>
## 1: Lake Nyasa Mnyusi B Iringa 11 5
## 2: Lake Victoria Nyamara Mara 20 2
## 3: Pangani Majengo Manyara 21 4
## 4: Ruvuma / Southern Coast Mahakamani Mtwara 90 63
## 5: Lake Victoria Kyanyamisa Kagera 18 1
## 6: Pangani Moa/Mwereme Tanga 4 8
## lga ward population public_meeting recorded_by
## <char> <char> <int> <lgcl> <char>
## 1: Ludewa Mundindi 109 TRUE GeoData Consultants Ltd
## 2: Serengeti Natta 280 NA GeoData Consultants Ltd
## 3: Simanjiro Ngorika 250 TRUE GeoData Consultants Ltd
## 4: Nanyumbu Nanyumbu 58 TRUE GeoData Consultants Ltd
## 5: Karagwe Nyakasimbi 0 TRUE GeoData Consultants Ltd
## 6: Mkinga Moa 1 TRUE GeoData Consultants Ltd
## scheme_management scheme_name permit construction_year
## <char> <char> <lgcl> <int>
## 1: VWC Roman FALSE 1999
## 2: Other TRUE 2010
## 3: VWC Nyumba ya mungu pipe scheme TRUE 2009
## 4: VWC TRUE 1986
## 5: TRUE 0
## 6: VWC Zingibali TRUE 2009
## extraction_type extraction_type_group extraction_type_class management
## <char> <char> <char> <char>
## 1: gravity gravity gravity vwc
## 2: gravity gravity gravity wug
## 3: gravity gravity gravity vwc
## 4: submersible submersible submersible vwc
## 5: gravity gravity gravity other
## 6: submersible submersible submersible vwc
## management_group payment payment_type water_quality quality_group
## <char> <char> <char> <char> <char>
## 1: user-group pay annually annually soft good
## 2: user-group never pay never pay soft good
## 3: user-group pay per bucket per bucket soft good
## 4: user-group never pay never pay soft good
## 5: other never pay never pay soft good
## 6: user-group pay per bucket per bucket salty salty
## quantity quantity_group source source_type
## <char> <char> <char> <char>
## 1: enough enough spring spring
## 2: insufficient insufficient rainwater harvesting rainwater harvesting
## 3: enough enough dam dam
## 4: dry dry machine dbh borehole
## 5: seasonal seasonal rainwater harvesting rainwater harvesting
## 6: enough enough other other
## source_class waterpoint_type waterpoint_type_group
## <char> <char> <char>
## 1: groundwater communal standpipe communal standpipe
## 2: surface communal standpipe communal standpipe
## 3: surface communal standpipe multiple communal standpipe
## 4: groundwater communal standpipe multiple communal standpipe
## 5: surface communal standpipe communal standpipe
## 6: unknown communal standpipe multiple communal standpipe
El conjunto de datos consta de \(59400\) filas y \(40\) columnas, por lo que tenemos \(40\) variables posibles a analizar, lo que implica que el dataset tiene un tamaño de \(2376000\) datos.
print(nrow(df)*ncol(df))
## [1] 2376000
Veamos el tipo de variables con las que estamos trabajando y cómo están clasificadas:
glimpse(df)
## Rows: 59,400
## Columns: 40
## $ id <int> 69572, 8776, 34310, 67743, 19728, 9944, 19816, 5…
## $ amount_tsh <dbl> 6000, 0, 25, 0, 0, 20, 0, 0, 0, 0, 0, 200, 0, 0,…
## $ date_recorded <IDate> 2011-03-14, 2013-03-06, 2013-02-25, 2013-01-28…
## $ funder <chr> "Roman", "Grumeti", "Lottery Club", "Unicef", "A…
## $ gps_height <int> 1390, 1399, 686, 263, 0, 0, 0, 0, 0, 0, 62, 1062…
## $ installer <chr> "Roman", "GRUMETI", "World vision", "UNICEF", "A…
## $ longitude <dbl> 34.93809, 34.69877, 37.46066, 38.48616, 31.13085…
## $ latitude <dbl> -9.85632177, -2.14746569, -3.82132853, -11.15529…
## $ wpt_name <chr> "none", "Zahanati", "Kwa Mahundi", "Zahanati Ya …
## $ num_private <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, …
## $ basin <chr> "Lake Nyasa", "Lake Victoria", "Pangani", "Ruvum…
## $ subvillage <chr> "Mnyusi B", "Nyamara", "Majengo", "Mahakamani", …
## $ region <chr> "Iringa", "Mara", "Manyara", "Mtwara", "Kagera",…
## $ region_code <int> 11, 20, 21, 90, 18, 4, 17, 17, 14, 18, 60, 10, 1…
## $ district_code <int> 5, 2, 4, 63, 1, 8, 3, 3, 6, 1, 43, 5, 2, 7, 6, 2…
## $ lga <chr> "Ludewa", "Serengeti", "Simanjiro", "Nanyumbu", …
## $ ward <chr> "Mundindi", "Natta", "Ngorika", "Nanyumbu", "Nya…
## $ population <int> 109, 280, 250, 58, 0, 1, 0, 0, 0, 0, 345, 250, 0…
## $ public_meeting <lgl> TRUE, NA, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TR…
## $ recorded_by <chr> "GeoData Consultants Ltd", "GeoData Consultants …
## $ scheme_management <chr> "VWC", "Other", "VWC", "VWC", "", "VWC", "VWC", …
## $ scheme_name <chr> "Roman", "", "Nyumba ya mungu pipe scheme", "", …
## $ permit <lgl> FALSE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE,…
## $ construction_year <int> 1999, 2010, 2009, 1986, 0, 2009, 0, 0, 0, 0, 201…
## $ extraction_type <chr> "gravity", "gravity", "gravity", "submersible", …
## $ extraction_type_group <chr> "gravity", "gravity", "gravity", "submersible", …
## $ extraction_type_class <chr> "gravity", "gravity", "gravity", "submersible", …
## $ management <chr> "vwc", "wug", "vwc", "vwc", "other", "vwc", "vwc…
## $ management_group <chr> "user-group", "user-group", "user-group", "user-…
## $ payment <chr> "pay annually", "never pay", "pay per bucket", "…
## $ payment_type <chr> "annually", "never pay", "per bucket", "never pa…
## $ water_quality <chr> "soft", "soft", "soft", "soft", "soft", "salty",…
## $ quality_group <chr> "good", "good", "good", "good", "good", "salty",…
## $ quantity <chr> "enough", "insufficient", "enough", "dry", "seas…
## $ quantity_group <chr> "enough", "insufficient", "enough", "dry", "seas…
## $ source <chr> "spring", "rainwater harvesting", "dam", "machin…
## $ source_type <chr> "spring", "rainwater harvesting", "dam", "boreho…
## $ source_class <chr> "groundwater", "surface", "surface", "groundwate…
## $ waterpoint_type <chr> "communal standpipe", "communal standpipe", "com…
## $ waterpoint_type_group <chr> "communal standpipe", "communal standpipe", "com…
Gracias a la función glimpse obtenemos un resumen de los
tipos de las variables con las que vamos a trabajar. Cabe destacar:
amount_tsh: podría referirse a la cantidad de
carga estática total hídrica (TSH en inglés, amount of total static
head) o una cantidad monetaria, ya que TSH es Tanzanian Shilling, el
chelín tanzano. Esta indeterminación en el significado de la variable
podría causar problemas más adelante, sería necesaria más información al
respecto. Caracterizado como double, en cualquiera de los
casos, este tipo sería el correcto.
public_meeting: vemos con un primer análisis que esta variable presenta NA.
num_private: parece ser una variable que vale 0 para todas las bombas de agua.
Nada destacable del resto de variables.
No podemos asegurar, debido al tamaño del dataset, que existan más valores NA en el resto de variables. Por esta razón, vamos a calcular el porcentaje y la cantidad de valores NA con el siguiente fragmento de código:
library(skimr) # cargamos el paquete de la función skim()
library(formattable)
df$date_recorded <- as.Date(df$date_recorded, format = "%Y-%m-%d") # Estandarizamos el formato de fecha para evitar errores futuros
desc_df = skim(df)
var_type_missing_df <- desc_df %>%
mutate(n_missing_perc = 100 * round(1-complete_rate, 3)) %>%
select(skim_type, skim_variable, n_missing, n_missing_perc) %>%
arrange(skim_type, n_missing)
formattable(var_type_missing_df)
| skim_type | skim_variable | n_missing | n_missing_perc |
|---|---|---|---|
| Date | date_recorded | 0 | 0.0 |
| character | funder | 0 | 0.0 |
| character | installer | 0 | 0.0 |
| character | wpt_name | 0 | 0.0 |
| character | basin | 0 | 0.0 |
| character | subvillage | 0 | 0.0 |
| character | region | 0 | 0.0 |
| character | lga | 0 | 0.0 |
| character | ward | 0 | 0.0 |
| character | recorded_by | 0 | 0.0 |
| character | scheme_management | 0 | 0.0 |
| character | scheme_name | 0 | 0.0 |
| character | extraction_type | 0 | 0.0 |
| character | extraction_type_group | 0 | 0.0 |
| character | extraction_type_class | 0 | 0.0 |
| character | management | 0 | 0.0 |
| character | management_group | 0 | 0.0 |
| character | payment | 0 | 0.0 |
| character | payment_type | 0 | 0.0 |
| character | water_quality | 0 | 0.0 |
| character | quality_group | 0 | 0.0 |
| character | quantity | 0 | 0.0 |
| character | quantity_group | 0 | 0.0 |
| character | source | 0 | 0.0 |
| character | source_type | 0 | 0.0 |
| character | source_class | 0 | 0.0 |
| character | waterpoint_type | 0 | 0.0 |
| character | waterpoint_type_group | 0 | 0.0 |
| logical | permit | 3056 | 5.1 |
| logical | public_meeting | 3334 | 5.6 |
| numeric | id | 0 | 0.0 |
| numeric | amount_tsh | 0 | 0.0 |
| numeric | gps_height | 0 | 0.0 |
| numeric | longitude | 0 | 0.0 |
| numeric | latitude | 0 | 0.0 |
| numeric | num_private | 0 | 0.0 |
| numeric | region_code | 0 | 0.0 |
| numeric | district_code | 0 | 0.0 |
| numeric | population | 0 | 0.0 |
| numeric | construction_year | 0 | 0.0 |
Vemos de la tabla anterior que solamente las variables
permit y public_meeting contienen valores NA.
Más concretamente:
permit contiene 3056 valores NA, lo que
supone un \(5.1\%\) sobre el total de
datos del dataset.public_meetingcontiene 3334 valores NA, lo
que supone un \(5.6\%\) sobre el total
de datos del dataset.Vamos a hacer limpieza de los datos, las explicaciones pertinentes aparecen como comentarios en los códigos.
#La columna num_private sólo contiene valores 0, la eliminamos
df$num_private = NULL
#Las celdas sin valor (celdas vacías) las sustituimos por Not Known y los valores Not known por Not Known para unificar
df$installer[df$installer == ""] <- "Not Known"
df$installer[df$installer == "Not known"] <- "Not Known"
# Calcular la media de la columna (excluyendo el valor específico -0.00000002)
mediaLatitud <- mean(df$latitude[df$latitude != -0.00000002], na.rm = TRUE)
# Sustituir el valor específico por la media
df$latitude[df$latitude == -0.00000002] <- mediaLatitud
# Calcular la media de la columna (excluyendo el valor específico 0.00000)
mediaLong <- mean(df$longitude[df$longitude != 0.00000], na.rm = TRUE)
# Sustituir el valor específico por la media
df$longitude[df$longitude == 0.00000] <- mediaLong
#Las celdas sin valor (celdas vacías) las sustituimos por Not Known
df$wpt_name[df$wpt_name == "none"] <- "Not Known"
df$wpt_name[df$wpt_name == "None"] <- "Not Known"
df$wpt_name[df$wpt_name == ""] <- "Not Known"
#Las celdas sin valor (celdas vacías) las sustituimos por Not Known
df$subvillage[df$subvillage == "none"] <- "Not Known"
df$subvillage[df$subvillage == "None"] <- "Not Known"
df$subvillage[df$subvillage == ""] <- "Not Known"
#Las celdas sin valor (celdas vacías) las sustituimos por Not Known
df$region[df$region == "none"] <- "Not Known"
df$region[df$region == "None"] <- "Not Known"
df$region[df$region == ""] <- "Not Known"
#Las celdas sin valor (celdas vacías) las sustituimos por Not Known
df$scheme_management[df$scheme_management == "none"] <- "Not Known"
df$scheme_management[df$scheme_management == "None"] <- "Not Known"
df$scheme_management[df$scheme_management == ""] <- "Not Known"
#Las celdas sin valor (celdas vacías) las sustituimos por Not Known
df$scheme_name[df$scheme_name == "none"] <- "Not Known"
df$scheme_name[df$scheme_name == "None"] <- "Not Known"
df$scheme_name[df$scheme_name == ""] <- "Not Known"
#Las celdas con Na. TRUE/FALSE las sustituimos por un 3er estado NOT KNOWN
df$public_meeting[is.na(df$public_meeting)] <- "NOT KNOWN"
df$public_meeting[df$public_meeting == ""] <- "NOT KNOWN"
#Las celdas con Na. TRUE/FALSE las sustituimos por un 3er estado NOT KNOWN
df$permit[is.na(df$permit)] <- "NOT KNOWN"
df$permit[df$permit == ""] <- "NOT KNOWN"
Primero, nos aseguramos de que nuestro dataset está en formato
data.table.
dfBombas = as.data.table(df)
Nos planteamos diversas preguntas para abordar el dataset.
Para abordar esta pregunta hacemos uso de los datos relativos a las
coordenadas geográficas de nuestro dataset (latitud y longitud) que nos
permiten localizar las bombas de agua en un mapa. En primer lugar,
podemos hacer una representación estática donde obtendremos el contorno
de Tanzania y la localización de las bombas de agua en función de la
región a la que pertenecen. Es una representación muy útil para hacernos
una idea de qué región posee más bombas de agua. Usamos las variables
latitude y longitude.
#Podemos visualizar dónde están cada uno de los pozos por región en Tanzania
dfBombas$region <- as.factor(dfBombas$region)
ggplot(dfBombas, aes(x = dfBombas$longitude, y = dfBombas$latitude, color = region)) +
geom_point(size = 3) +
theme_minimal() +
labs(title = "Mapa de Pozos por Región",
x = "Longitud",
y = "Latitud",
color = "Región")
Como vemos, en primera instancia parece que la región de Iringa tiene una mayor densidad de bombas de agua, así como la región de Mbeya (afirmamos esto por la aparente densidad de los puntos de color del gráfico). Asimismo, parece que la región de Rukwa y Dar es Salaam son las que menos número de bombas tienen.
Podemos crear también un mapa interactivo con Tanzania de fondo para una mayor comprensión y visualización de la localización de todas las bombas de agua y que nos permitirá ver si tienen una fuente de agua o más (no subterránea) en cada una de las regiones.
# Cargar el paquete leaflet
library(leaflet)
# Crear un mapa interactivo
leaflet(dfBombas) %>%
addTiles() %>%
addCircleMarkers(~longitude, ~latitude, color = ~region, radius = 5,
popup = ~region)
Vemos que la localización de bombas de agua abunda en las regiones que están próximas a lagos y estarán localizadas donde exista agua apta para el consumo y no proveniente del océano (agua salada). Vemos una alta concentración de bombas en las regiones que lindan con el Lago Victoria, el Lago Rukwa y el Lago Tanganyika, entre otros.
conteoRegion = table(dfBombas$region)
formattable(conteoRegion)
##
## Arusha Dar es Salaam Dodoma Iringa Kagera
## 3350 805 2201 5294 3316
## Kigoma Kilimanjaro Lindi Manyara Mara
## 2816 4379 1546 1583 1969
## Mbeya Morogoro Mtwara Mwanza Pwani
## 4639 4006 1730 3102 2635
## Rukwa Ruvuma Shinyanga Singida Tabora
## 1808 2640 4982 2093 1959
## Tanga
## 2547
Vemos la tabla de frecuencias correspondientes a la cantidad de bombas de agua por región. Vamos a ver qué región tiene más bombas de agua. Para ello realizamos un conteo.
# Obtener el valor máximo de la tabla de frecuencias
valor_maximo = max(conteoRegion)
# Encontrar las categorías asociadas al valor máximo
categorias_maximas = names(conteoRegion[conteoRegion == valor_maximo])
# Mostrar el resultado
cat("El valor máximo es:", valor_maximo, "y corresponde a la(s) categoría(s):", categorias_maximas, "\n")
## El valor máximo es: 5294 y corresponde a la(s) categoría(s): Iringa
Obtenemos que la región con más bombas de agua es Iringa con 5294.
Podemos seguir el mismo proceso que antes para averiguar qué región es la que menos bombas de agua tiene.
# Obtener el valor máximo de la tabla de frecuencias
valor_min = min(conteoRegion)
# Encontrar las categorías asociadas al valor máximo
categorias_min = names(conteoRegion[conteoRegion == valor_min])
# Mostrar el resultado
cat("El valor máximo es:", valor_min, "y corresponde a la(s) categoría(s):", categorias_min, "\n")
## El valor máximo es: 805 y corresponde a la(s) categoría(s): Dar es Salaam
Obtenemos que la región con menos bombas de agua es Dar es Salaam con 805.
Es posible ver gráficamente la distribución de bombas de agua por región haciendo uso de un gráfico de barras. Lo representamos:
# Ordenar la tabla de frecuencias de mayor a menor
tabla_ordenada <- sort(conteoRegion, decreasing = TRUE)
# Crear el gráfico de barras horizontal
barplot_heights <- barplot(tabla_ordenada, main = "Bombas de Agua por Región (Tanzania)", horiz = TRUE,
xlab = "Cantidad de Bombas de Agua", col = "lightblue", las = 1)
# Añadir etiquetas con las cantidades sobre las barras
text(x = tabla_ordenada, y = barplot_heights, labels = tabla_ordenada, pos = 4, cex = 0.8, col = "black")
Vemos en el gráfico anterior las regiones ordenadas de menor cantidad de bombas de agua a mayor, como podemos ver, gracias a las etiquetas en cada barra.
Vamos a realizar en primer lugar un conteo de las bombas en función del año. Para ello, construimos una tabla de frecuencias.
# Contar las bombas por año
bombasYear = table(dfBombas$construction_year)
# Mostrar la tabla con los años y las frecuencias
print(bombasYear)
##
## 0 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971
## 20709 102 21 30 85 40 19 17 88 77 59 411 145
## 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984
## 708 184 676 437 414 202 1037 192 811 238 744 488 779
## 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997
## 945 434 302 521 316 954 324 640 608 738 1014 811 644
## 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010
## 966 979 2091 540 1075 1286 1123 1011 1471 1587 2613 2533 2645
## 2011 2012 2013
## 1256 1084 176
# Visualizar en un gráfico de barras
barplot(bombasYear, main = "Cantidad de Bombas de Agua Construidas por Año",
xlab = "Año", ylab = "Cantidad", col = "lightgreen", las = 2, cex.names = 0.8)
Como vemos existe una gran cantidad de bombas construidas en el año 0, esto nos indica que existe un gran cantidad de bombas de agua que tienen un año de construcción desconocido. Eliminar las filas con años 0 no es una opción ya que estaríamos perdiendo mucha información. Por ello, para obtener una cierta información sobre la distribución de la cantidad de bombas de agua en función del año de construcción, vamos a representar el gráfico anterior eliminando el dato 0.
Eliminamos de nuestro gráfico anterior el año 0 (solamente del gráfico, no del dataset).
# Crear la tabla de frecuencias por año
bombasYear = table(dfBombas$construction_year)
# Excluir el año 0 solo de la representación gráfica
bombasYear_filtrado = bombasYear[names(bombasYear) != "0"]
# Visualizar en un gráfico de barras sin incluir el año 0
barplot(bombasYear_filtrado, main = "Cantidad de Bombas de Agua Construidas por Año (Sin Año 0)",
xlab = "Año", ylab = "Cantidad", col = "lightgreen", las = 2, cex.names = 0.8)
Como vemos, eliminando el “año 0” obtenemos una información no sesgada que nos permite visualizar la “realidad” sobre los años de construcción de las bombas. Vemos que a partir de la década de los años 90 existe una tendencia al alza de construcción de bombas de agua. Puede ser debida a la evolución de las tecnologías o a que han tenido acceso a las mismas para explotar sus propias fuentes de agua. Calculamos a continuación el año con un mayor número de bombas construidas.
# Encontrar el año con más bombas construidas
yearMax = names(bombasYear_filtrado[which.max(bombasYear_filtrado)])
# Mostrar el resultado
cat("El año con mayor número de bombas construidas es:", yearMax, "con", max(bombasYear_filtrado), "bombas.\n")
## El año con mayor número de bombas construidas es: 2010 con 2645 bombas.
Como vemos, el año 2010 tiene el máximo de bombas de agua construidas con \(2645\). También es preciso calcular el año con menos construcciones de bombas.
# Encontrar el año con menos bombas construidas
yearMin = names(bombasYear_filtrado[which.min(bombasYear_filtrado)])
# Mostrar el resultado
cat("El año con menor número de bombas construidas es:", yearMin, "con", min(bombasYear_filtrado), "bombas.\n")
## El año con menor número de bombas construidas es: 1966 con 17 bombas.
Es lógico, que el año con menor construcciones de bombas se encuentre fuera de la región con tendencia al alza de construcción de bombas (a partir de la década de los 90), siendo este año 1966 con solamente 17 bombas de agua cosntruidas.
Region comparada con basinVamos a analizar la región con el tipo de depresión geográfica en la
que se encuentran las bombas. Para ello, relacionamos la variable
region con la variable basin. Mostramos la
tabla de frecuencias para hacernos una idea inicial de lo que
analizamos.
# Contar la cantidad de bombas por región y cuenca (basin)
conteo_por_region_basin <- table(dfBombas$region, dfBombas$basin)
# Mostrar el resultado
formattable(conteo_por_region_basin)
##
## Internal Lake Nyasa Lake Rukwa Lake Tanganyika Lake Victoria
## Arusha 1309 0 0 0 32
## Dar es Salaam 0 0 0 0 0
## Dodoma 827 0 0 0 0
## Iringa 0 1582 0 0 0
## Kagera 0 0 0 341 2975
## Kigoma 0 0 0 2816 0
## Kilimanjaro 169 0 0 0 0
## Lindi 0 0 0 0 0
## Manyara 1206 0 0 0 0
## Mara 0 0 0 0 1969
## Mbeya 0 2430 1427 0 0
## Morogoro 0 0 0 0 0
## Mtwara 0 0 0 0 0
## Mwanza 0 0 0 99 3003
## Pwani 0 0 0 0 0
## Rukwa 0 0 1011 797 0
## Ruvuma 0 1073 0 0 0
## Shinyanga 1641 0 0 1072 2269
## Singida 1992 0 1 8 0
## Tabora 641 0 15 1299 0
## Tanga 0 0 0 0 0
##
## Pangani Rufiji Ruvuma / Southern Coast Wami / Ruvu
## Arusha 2009 0 0 0
## Dar es Salaam 0 0 0 805
## Dodoma 0 359 0 1015
## Iringa 0 3712 0 0
## Kagera 0 0 0 0
## Kigoma 0 0 0 0
## Kilimanjaro 4210 0 0 0
## Lindi 0 90 1456 0
## Manyara 288 0 0 89
## Mara 0 0 0 0
## Mbeya 0 782 0 0
## Morogoro 0 1893 0 2113
## Mtwara 0 0 1730 0
## Mwanza 0 0 0 0
## Pwani 0 784 0 1851
## Rukwa 0 0 0 0
## Ruvuma 0 260 1307 0
## Shinyanga 0 0 0 0
## Singida 0 92 0 0
## Tabora 0 4 0 0
## Tanga 2433 0 0 114
La tabla anterior nos permite visualizar cuántas bombas de agua hay en cada región (como en el análisis anterior) y cómo están distribuidas, es decir, de dónde toman el agua dependiendo de las fuentes de la misma que haya en cada región. Calculamos en forma de porcentajes la información que nos proporciona la tabla de frecuencias anterior.
porcentajes_por_fila <- prop.table(conteo_por_region_basin, margin = 1) * 100
porcentajes_por_fila
##
## Internal Lake Nyasa Lake Rukwa Lake Tanganyika
## Arusha 39.07462687 0.00000000 0.00000000 0.00000000
## Dar es Salaam 0.00000000 0.00000000 0.00000000 0.00000000
## Dodoma 37.57383008 0.00000000 0.00000000 0.00000000
## Iringa 0.00000000 29.88288629 0.00000000 0.00000000
## Kagera 0.00000000 0.00000000 0.00000000 10.28347407
## Kigoma 0.00000000 0.00000000 0.00000000 100.00000000
## Kilimanjaro 3.85932861 0.00000000 0.00000000 0.00000000
## Lindi 0.00000000 0.00000000 0.00000000 0.00000000
## Manyara 76.18445989 0.00000000 0.00000000 0.00000000
## Mara 0.00000000 0.00000000 0.00000000 0.00000000
## Mbeya 0.00000000 52.38197887 30.76093986 0.00000000
## Morogoro 0.00000000 0.00000000 0.00000000 0.00000000
## Mtwara 0.00000000 0.00000000 0.00000000 0.00000000
## Mwanza 0.00000000 0.00000000 0.00000000 3.19148936
## Pwani 0.00000000 0.00000000 0.00000000 0.00000000
## Rukwa 0.00000000 0.00000000 55.91814159 44.08185841
## Ruvuma 0.00000000 40.64393939 0.00000000 0.00000000
## Shinyanga 32.93857888 0.00000000 0.00000000 21.51746287
## Singida 95.17439083 0.00000000 0.04777831 0.38222647
## Tabora 32.72077591 0.00000000 0.76569678 66.30934150
## Tanga 0.00000000 0.00000000 0.00000000 0.00000000
##
## Lake Victoria Pangani Rufiji Ruvuma / Southern Coast
## Arusha 0.95522388 59.97014925 0.00000000 0.00000000
## Dar es Salaam 0.00000000 0.00000000 0.00000000 0.00000000
## Dodoma 0.00000000 0.00000000 16.31076783 0.00000000
## Iringa 0.00000000 0.00000000 70.11711371 0.00000000
## Kagera 89.71652593 0.00000000 0.00000000 0.00000000
## Kigoma 0.00000000 0.00000000 0.00000000 0.00000000
## Kilimanjaro 0.00000000 96.14067139 0.00000000 0.00000000
## Lindi 0.00000000 0.00000000 5.82147477 94.17852523
## Manyara 0.00000000 18.19330385 0.00000000 0.00000000
## Mara 100.00000000 0.00000000 0.00000000 0.00000000
## Mbeya 0.00000000 0.00000000 16.85708127 0.00000000
## Morogoro 0.00000000 0.00000000 47.25411882 0.00000000
## Mtwara 0.00000000 0.00000000 0.00000000 100.00000000
## Mwanza 96.80851064 0.00000000 0.00000000 0.00000000
## Pwani 0.00000000 0.00000000 29.75332068 0.00000000
## Rukwa 0.00000000 0.00000000 0.00000000 0.00000000
## Ruvuma 0.00000000 0.00000000 9.84848485 49.50757576
## Shinyanga 45.54395825 0.00000000 0.00000000 0.00000000
## Singida 0.00000000 0.00000000 4.39560440 0.00000000
## Tabora 0.00000000 0.00000000 0.20418581 0.00000000
## Tanga 0.00000000 95.52414605 0.00000000 0.00000000
##
## Wami / Ruvu
## Arusha 0.00000000
## Dar es Salaam 100.00000000
## Dodoma 46.11540209
## Iringa 0.00000000
## Kagera 0.00000000
## Kigoma 0.00000000
## Kilimanjaro 0.00000000
## Lindi 0.00000000
## Manyara 5.62223626
## Mara 0.00000000
## Mbeya 0.00000000
## Morogoro 52.74588118
## Mtwara 0.00000000
## Mwanza 0.00000000
## Pwani 70.24667932
## Rukwa 0.00000000
## Ruvuma 0.00000000
## Shinyanga 0.00000000
## Singida 0.00000000
## Tabora 0.00000000
## Tanga 4.47585395
Como vemos, por ejemplo, la región de Dar es Salaam tiene todas sus bombas tomando agua de los ríos Wami/Ruvu, se corresponderá con la única fuente de la que pueden obtener el agua. Lo mismo ocurre con la región Kigoma que tiene todas sus bombas localizadas en el Lago Tanganyika. Vemos que el resto de regiones toman el agua de diversas fuentes, lo que nos da información del diferente acceso a fuentes de agua de las distintas regiones que conforman el país de Tanzania. Podemos visualizar lo anterior si hacemos uso de un mapa de calor:
heatmap(conteo_por_region_basin, main = "Bombas de Agua por Región y Cuenca", col = heat.colors(20), scale = "none",
xlab = "Cuenca (Basin)", ylab = "Región")
legend("topright",
legend = c("Low", "Medium", "High"),
fill = heat.colors(3),
title = "Density Level")
Resulta también interesante evaluar la calidad del agua en las distintas regiones y posteriormente, ver si coincide con las regiones que más bombas de agua tienen.
#Realizamos una tabla de frecuencias para relacionar ambas magnitudes
tablaRegCal = table(dfBombas$region, dfBombas$quality_group)
formattable(tablaRegCal)
##
## colored fluoride good milky salty unknown
## Arusha 14 131 3154 2 12 37
## Dar es Salaam 0 2 541 2 241 19
## Dodoma 30 0 1746 19 394 12
## Iringa 2 0 5226 0 27 39
## Kagera 27 3 3078 47 85 76
## Kigoma 8 1 2738 12 20 37
## Kilimanjaro 1 2 4262 0 68 46
## Lindi 9 0 852 26 501 158
## Manyara 5 14 1341 3 197 23
## Mara 6 1 1369 5 531 57
## Mbeya 97 22 4355 20 74 71
## Morogoro 86 15 3167 21 555 162
## Mtwara 16 2 1352 24 297 39
## Mwanza 5 2 2524 38 302 231
## Pwani 23 1 2302 11 271 27
## Rukwa 9 0 1500 13 184 102
## Ruvuma 10 0 2594 1 10 25
## Shinyanga 42 12 3844 454 433 197
## Singida 9 4 1493 11 109 467
## Tabora 58 2 1463 88 321 27
## Tanga 33 3 1917 7 563 24
La región con un mayor número de bombas que extraen agua de buena calidad es Iringa con \(5226\), seguida por Mbeya con \(4355\) y Kilimanjaro con \(4262\).
Vemos de los datos obtenidos que el agua obtenida por las bombas de la gran mayoría de las regiones tiene una buena calidad (good), salvo las regiones de Dar es Salaam y Lindi que tienen un menor número de bombas con buena calidad de agua. Pero es necesario analizar estas dos regiones en perspectiva.
La región de Dar es Salaam. Hemos visto anteriormente que esta región tiene un total de \(805\) bombas de agua, esto implica que un porcentaje importante, el \(67.2\%\), de sus bombas extraen agua de buena calidad.
La región de Lindi. De nuestro análisis anterior, hemos obtenido que esta región tiene \(1546\) extrayendo agua. Esto quiere decir, que el \(55.1\%\) de las bombas están extrayendo agua de buena calidad. La población obtiene su agua de buena calidad sólo de la mitad de las bombas que poseen.
Sería interesante ver la tabla anterior en forma de porcentajes.
porcentajeAguaCal = prop.table(tablaRegCal, margin = 1) * 100
tablaFormatPorc = formattable(porcentajeAguaCal)
tablaFormatPorc
##
## colored fluoride good milky salty
## Arusha 0.41791045 3.91044776 94.14925373 0.05970149 0.35820896
## Dar es Salaam 0.00000000 0.24844720 67.20496894 0.24844720 29.93788820
## Dodoma 1.36301681 0.00000000 79.32757837 0.86324398 17.90095411
## Iringa 0.03777862 0.00000000 98.71552701 0.00000000 0.51001133
## Kagera 0.81423402 0.09047045 92.82267793 1.41737033 2.56332931
## Kigoma 0.28409091 0.03551136 97.23011364 0.42613636 0.71022727
## Kilimanjaro 0.02283626 0.04567253 97.32815711 0.00000000 1.55286595
## Lindi 0.58214748 0.00000000 55.10996119 1.68175938 32.40620957
## Manyara 0.31585597 0.88439672 84.71257107 0.18951358 12.44472521
## Mara 0.30472321 0.05078720 69.52767902 0.25393601 26.96800406
## Mbeya 2.09096788 0.47424014 93.87799095 0.43112740 1.59517137
## Morogoro 2.14677983 0.37443834 79.05641538 0.52421368 13.85421867
## Mtwara 0.92485549 0.11560694 78.15028902 1.38728324 17.16763006
## Mwanza 0.16118633 0.06447453 81.36686009 1.22501612 9.73565442
## Pwani 0.87286528 0.03795066 87.36242884 0.41745731 10.28462998
## Rukwa 0.49778761 0.00000000 82.96460177 0.71902655 10.17699115
## Ruvuma 0.37878788 0.00000000 98.25757576 0.03787879 0.37878788
## Shinyanga 0.84303493 0.24086712 77.15776796 9.11280610 8.69128864
## Singida 0.43000478 0.19111323 71.33301481 0.52556140 5.20783564
## Tabora 2.96069423 0.10209290 74.68095967 4.49208780 16.38591118
## Tanga 1.29564193 0.11778563 75.26501767 0.27483314 22.10443659
##
## unknown
## Arusha 1.10447761
## Dar es Salaam 2.36024845
## Dodoma 0.54520672
## Iringa 0.73668304
## Kagera 2.29191797
## Kigoma 1.31392045
## Kilimanjaro 1.05046814
## Lindi 10.21992238
## Manyara 1.45293746
## Mara 2.89487049
## Mbeya 1.53050226
## Morogoro 4.04393410
## Mtwara 2.25433526
## Mwanza 7.44680851
## Pwani 1.02466793
## Rukwa 5.64159292
## Ruvuma 0.94696970
## Shinyanga 3.95423525
## Singida 22.31247014
## Tabora 1.37825421
## Tanga 0.94228504
Vemos que el porcentaje para cada región de calidad de agua desconocida (unknown) es menor del \(7\%\) (exceptuando la región de Singida con un \(22.3\%\) y la región de Lindi con un \(10.2\%\)), por lo que podemos decir que en conjunto el porcentaje de datos desconocidos es aceptable.
Calculamos el total de los pozos que tienen la calidad del agua “good” para evaluar la calidad del agua general que extraen todas las bombas de agua de Tanzania.
dataCal = data.frame(tablaRegCal)
total_freq_good = sum(dataCal$Freq[dataCal$Var2 == "good"])
print(total_freq_good)
## [1] 50818
Del total de las bombas de agua presentes en el país (\(59400\)), \(50818\) extraen agua de calidad buena estaríamos hablando del \(85.6\%\). Es decir, solamente el \(14.4\%\) de las bombas no está proporcionando agua apta para el consumo.
Podemos representar gráficamente el número de bombas de agua de cada región en función de la calidad del agua.
# Crear el gráfico de barras apiladas
ggplot(dataCal, aes(x = Var1, y = Freq, fill = Var2)) +
geom_bar(stat = "identity") +
labs(title = "Núm bombas de agua vs. Región y calidad del agua",
x = "Región",
y = "Número de bombas de agua",
fill = "Calidad del agua") +
theme_minimal() +
theme(axis.text.x = element_text(angle = 90, hjust = 1))
Por ejemplo, vemos claramente que la región de Iringa tiene un mayor número de bombas de agua que la extraen de calidad buena, habíamos analizado anteriormente que la región de Iringa obtiene en su mayor parte su agua del río Rufiji por lo que suponemos que la calidad de agua de este río es buena. La siguen Mbeya (obtiene su agua de los lagos Nyasa y Rukwa) y Kilimanjaro que obtiene el \(96\%\) de su agua del río Pangani.
quality_group y water_qualityTambién puede ser interesante ver si la calidad del agua que hemos analizado en el apartado anterior tiene relación con el tipo de agua. Para ello, realizamos una tabla de frecuencias que relacione ambas variables.
tablaCalTipo = table(dfBombas$quality_group, dfBombas$water_quality)
tablaCalTipo
##
## coloured fluoride fluoride abandoned milky salty salty abandoned
## colored 490 0 0 0 0 0
## fluoride 0 200 17 0 0 0
## good 0 0 0 0 0 0
## milky 0 0 0 804 0 0
## salty 0 0 0 0 4856 339
## unknown 0 0 0 0 0 0
##
## soft unknown
## colored 0 0
## fluoride 0 0
## good 50818 0
## milky 0 0
## salty 0 0
## unknown 0 1876
Vemos que si la calidad del agua es buena, está directamente relacionado con que sea de tipo blanda, es decir, hablamos de un agua que tiene baja concentración de minerales, es más suave y no deja residuos. Y, como vemos de la tabla anterior, obtenemos el mismo número de bombas de agua que extraían agua de calidad buena, \(50818\).
Es interesante ver la densidad de población de las regiones y ver si
coinciden con las regiones que tienen una mayor cantidad de bombas de
agua y con la calidad de dicha agua. Para ello sumamos la población por
regiones haciendo uso de las variables population y
region.
suma_poblacion <- aggregate(dfBombas$population ~ dfBombas$region, data = dfBombas, sum)
print(suma_poblacion)
## dfBombas$region dfBombas$population
## 1 Arusha 878501
## 2 Dar es Salaam 193879
## 3 Dodoma 0
## 4 Iringa 499247
## 5 Kagera 0
## 6 Kigoma 1408681
## 7 Kilimanjaro 463070
## 8 Lindi 563370
## 9 Manyara 503043
## 10 Mara 1060886
## 11 Mbeya 0
## 12 Morogoro 1060090
## 13 Mtwara 462674
## 14 Mwanza 202610
## 15 Pwani 920896
## 16 Rukwa 661359
## 17 Ruvuma 525411
## 18 Shinyanga 70251
## 19 Singida 584203
## 20 Tabora 0
## 21 Tanga 628482
Para una mayor claridad, representamos gráficamente la tabla anterior:
ggplot(suma_poblacion, aes(x = reorder(`dfBombas$region`, -`dfBombas$population`), y = `dfBombas$population`, fill = `dfBombas$region`)) +
geom_bar(stat = "identity") +
geom_text(aes(label = `dfBombas$population`), vjust = -0.3, size = 3) +
labs(title = "Población por Región",
x = "Región",
y = "Población Total") +
theme_minimal() +
theme(axis.text.x = element_text(angle = 45, hjust = 1),
legend.position = "none")
Las tres regiones con más población son Kigoma, Mara y Morogoro. Vamos a ver si existe relación entre la cantidad de población y la cantidad de bombas que extraen agua de calidad buena.
No existe una aparente relación entre el número de población y la cantidad de bombas de agua que extraen dicha agua de buena calidad. Además, si recordamos, la región de Iringa era la región que tenía un mayor número de bombas que extraen agua de calidad buena (5226) y tiene una población de 499.247.
Es interesante seguir con nuestro estudio y ver la cantidad de agua de la que dispone cada región, relacionarla con la población y de nuevo si es proporcional en relación con la cantidad de bombas que extraen agua de buena calidad.
Creamos una tabla de frecuencias donde relacionamos la región
(region) con la cantidad de agua (quantity)
clasificada como dry, enough, insufficient, seasonal y unknown (seca,
suficiente, insuficiente, estacional y desconocida).
tablaCantPob = table(dfBombas$quantity, dfBombas$region)
tablaCantPob
##
## Arusha Dar es Salaam Dodoma Iringa Kagera Kigoma Kilimanjaro
## dry 28 135 561 521 397 72 15
## enough 1210 576 1067 4365 1927 1887 2584
## insufficient 1751 50 531 246 744 708 1731
## seasonal 326 27 42 150 216 125 36
## unknown 35 17 0 12 32 24 13
##
## Lindi Manyara Mara Mbeya Morogoro Mtwara Mwanza Pwani Rukwa
## dry 307 118 59 640 200 539 372 169 171
## enough 766 983 1295 2241 1941 764 1425 1898 1211
## insufficient 346 431 377 958 1620 252 1107 424 321
## seasonal 83 38 176 781 167 164 153 125 46
## unknown 44 13 62 19 78 11 45 19 59
##
## Ruvuma Shinyanga Singida Tabora Tanga
## dry 653 393 455 331 110
## enough 1265 2755 750 953 1323
## insufficient 495 1044 690 426 877
## seasonal 207 653 114 236 185
## unknown 20 137 84 13 52
tablaCantPob_df = data.frame(tablaCantPob)
tablaCantPob_df
## Var1 Var2 Freq
## 1 dry Arusha 28
## 2 enough Arusha 1210
## 3 insufficient Arusha 1751
## 4 seasonal Arusha 326
## 5 unknown Arusha 35
## 6 dry Dar es Salaam 135
## 7 enough Dar es Salaam 576
## 8 insufficient Dar es Salaam 50
## 9 seasonal Dar es Salaam 27
## 10 unknown Dar es Salaam 17
## 11 dry Dodoma 561
## 12 enough Dodoma 1067
## 13 insufficient Dodoma 531
## 14 seasonal Dodoma 42
## 15 unknown Dodoma 0
## 16 dry Iringa 521
## 17 enough Iringa 4365
## 18 insufficient Iringa 246
## 19 seasonal Iringa 150
## 20 unknown Iringa 12
## 21 dry Kagera 397
## 22 enough Kagera 1927
## 23 insufficient Kagera 744
## 24 seasonal Kagera 216
## 25 unknown Kagera 32
## 26 dry Kigoma 72
## 27 enough Kigoma 1887
## 28 insufficient Kigoma 708
## 29 seasonal Kigoma 125
## 30 unknown Kigoma 24
## 31 dry Kilimanjaro 15
## 32 enough Kilimanjaro 2584
## 33 insufficient Kilimanjaro 1731
## 34 seasonal Kilimanjaro 36
## 35 unknown Kilimanjaro 13
## 36 dry Lindi 307
## 37 enough Lindi 766
## 38 insufficient Lindi 346
## 39 seasonal Lindi 83
## 40 unknown Lindi 44
## 41 dry Manyara 118
## 42 enough Manyara 983
## 43 insufficient Manyara 431
## 44 seasonal Manyara 38
## 45 unknown Manyara 13
## 46 dry Mara 59
## 47 enough Mara 1295
## 48 insufficient Mara 377
## 49 seasonal Mara 176
## 50 unknown Mara 62
## 51 dry Mbeya 640
## 52 enough Mbeya 2241
## 53 insufficient Mbeya 958
## 54 seasonal Mbeya 781
## 55 unknown Mbeya 19
## 56 dry Morogoro 200
## 57 enough Morogoro 1941
## 58 insufficient Morogoro 1620
## 59 seasonal Morogoro 167
## 60 unknown Morogoro 78
## 61 dry Mtwara 539
## 62 enough Mtwara 764
## 63 insufficient Mtwara 252
## 64 seasonal Mtwara 164
## 65 unknown Mtwara 11
## 66 dry Mwanza 372
## 67 enough Mwanza 1425
## 68 insufficient Mwanza 1107
## 69 seasonal Mwanza 153
## 70 unknown Mwanza 45
## 71 dry Pwani 169
## 72 enough Pwani 1898
## 73 insufficient Pwani 424
## 74 seasonal Pwani 125
## 75 unknown Pwani 19
## 76 dry Rukwa 171
## 77 enough Rukwa 1211
## 78 insufficient Rukwa 321
## 79 seasonal Rukwa 46
## 80 unknown Rukwa 59
## 81 dry Ruvuma 653
## 82 enough Ruvuma 1265
## 83 insufficient Ruvuma 495
## 84 seasonal Ruvuma 207
## 85 unknown Ruvuma 20
## 86 dry Shinyanga 393
## 87 enough Shinyanga 2755
## 88 insufficient Shinyanga 1044
## 89 seasonal Shinyanga 653
## 90 unknown Shinyanga 137
## 91 dry Singida 455
## 92 enough Singida 750
## 93 insufficient Singida 690
## 94 seasonal Singida 114
## 95 unknown Singida 84
## 96 dry Tabora 331
## 97 enough Tabora 953
## 98 insufficient Tabora 426
## 99 seasonal Tabora 236
## 100 unknown Tabora 13
## 101 dry Tanga 110
## 102 enough Tanga 1323
## 103 insufficient Tanga 877
## 104 seasonal Tanga 185
## 105 unknown Tanga 52
# Crear el gráfico de barras apiladas
ggplot(tablaCantPob_df, aes(x = Var2, y = Freq, fill = Var1)) +
geom_bar(stat = "identity") +
labs(title = "Cantidad de agua de cada región",
x = "Región",
y = "Número de bombas de agua",
fill = "Cantidad de agua") +
theme_minimal() +
theme(axis.text.x = element_text(angle = 90, hjust = 1))
Como vemos la región de Iringa obtiene una cantidad de agua “suficiente” para su población. Como hemos visto en el apartado anterior esta región medianamente poblada, comparada con Kigoma, Mara y Morogoro, podríamos decir que obtiene más agua de la que necesita su población. Si tuviéramos información de los litros de agua anuales que recogen las bombas de agua de calidad buena de la región de Iringa podríamos calcular cuántos litros de agua corresponderían a cada ciudadano y compararlos con la cantidad de litros/habitante de las tres regiones más pobladas (que serían significativamente inferiores).
Realizamos a continuación el estudio de la proporción de bombas de
agua que tienen permisos para funcionar. Para ello, empleamos en este
caso la variable permit. Vamos a ver en primer lugar esta
información numéricamente.
frecuencia = table(dfBombas$permit)
frecuencia
##
## FALSE NOT KNOWN TRUE
## 17492 3056 38852
Recordamos, teníamos 59400 bombas.
print((frecuencia["TRUE"]/nrow(dfBombas))*100)
## TRUE
## 65.40741
Obtenemos que el 65% de las bombas tienen todos los permisos para funcionar, objetivamente, debería ser un porcentaje superior al 80%. Esto significa que el 30% no tienen permisos para funcionar, por lo que suponemos que se trata de construcciones ilegales.
print((frecuencia["FALSE"]/nrow(dfBombas))*100)
## FALSE
## 29.44781
Vemos gráficamente las cantidades anteriores haciendo uso de un gráfico de barras.
frecuencia1 <- c("FALSE" = 17492, "NOT KNOWN" = 3056, "TRUE" = 38852)
# Crear el barplot
barplot_heights1= barplot(frecuencia,
main = "Frecuencia de valores en la columna 'status'",
xlab = "Valores",
ylab = "Frecuencia",
col = c("lightblue", "pink", "lightyellow"),
ylim = c(0,max(frecuencia)+10),
border = "black")